import { call, put, takeLatest } from 'redux-saga/effects'
/*
  call: 用来触发请求方法用的
  put: 类似 dispatch 方法，用来触发事件用的
  takeLatest: 用来监听执行一个任务
*/
import { getBannerListaData, getProListaData } from '../api/pro'

import * as types from './types'

function* getBannerListAction () {


  // 1. 请求得到数据
  const res = yield call(getBannerListaData)


  // 2. 修改全局状态的方法
  yield put({
    type: types.CHANGE_BANNER_LIST,
    payload: res.data.data
  })
}

function* getProListaAction (action) {
  // 1. 请求得到数据
  // 当需要传递参数的时候，可以在执行的方法后添加
  const res = yield call(getProListaData, action.payload)

  // yield 使用的时候会按照顺序执行，第一个执行完毕后才会执行下一个
  yield put({
    type: types.CHANGE_PRO_LIST,
    payload: res.data.data
  })
}


function* mySaga () {
  // console.log('2222222222222222');

  // takeLatest 执行一个任务用的
  // takeLatest 是一个函数，该函数接收两个参数
  // types.REQUEST_BANNER_LIST 是用来监听任务的名称
  // getBannerListaAction 监听到任务名称后要执行的异步方法
  yield takeLatest(types.REQUEST_BANNER_LIST, getBannerListAction)
  yield takeLatest(types.REQUEST_PRO_LIST, getProListaAction)

}

export default mySaga
